#pragma once

#include <glibmm.h>
#include "../Shared/GObjHelpers.hpp"
#include "../Shared/TypesRegistry.hpp"
#include "XmlppForward.hpp"

namespace BuildNG
{
  class BuildContext;
  class ErrorLocationInfo;

  class InputFiles : public Object
  {
  public:
    InputFiles();

    virtual void load_from_xml(const Xml::Element &xml) = 0;

    virtual std::vector<Glib::ustring> get_files_list() = 0;
    virtual std::vector<Glib::ustring> build_physical_files(BuildContext &context) = 0;

    virtual bool get_xml_element_location_info(ErrorLocationInfo &location_info) { return false; }

  private:
  };

  typedef TypesRegistry<InputFiles> InputFilesTypesRegistry;
  typedef InputFilesTypesRegistry::TypeInfo InputFilesTypeInfo;
  extern InputFilesTypesRegistry input_files_types_registry;
}
